home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 2
/
Atari Mega Archive CD - Volume 2.iso
/
8bit
/
cislib_a
/
basic.asm
< prev
next >
Wrap
Assembly Source File
|
1995-04-22
|
3KB
|
121 lines
00010 ;SAVE"D:BASIC.SYN
00020 .LI OFF
00030 ; This program checks the OS/A+
00040 ; command input buffer, and
00050 ; then either removes or
00060 ; installs the BASIC rom on
00070 ; XL series computers. It
00080 ; does this by setting BASICF
00090 ; then executing a warmstart,
00100 ; to reset the OS variables for
00110 ; the correct RAM size.
00120 ;
00130 ; TYPE:
00140 ; BASIC I for BASIC in.
00150 ; BASIC O for BASIC out.
00160 ;
00170 ******************************
00180 * Daniel L. Moore 03/17/84 *
00190 ******************************
00200 ;
00210 BOOT .EQ $9
00220 DOSVEC .EQ $A
00230 DOSINI .EQ $C
00240 ;
00250 LOADFLG .EQ $CA rev A,B BASIC
00260 ;
00270 VECTMP .EQ $D4 FP register 0
00280 INITMP .EQ $D6
00290 ;
00300 BASICF .EQ $3F8
00310 ;
00320 DOSINIT .EQ $7E0 for FMS v.2
00330 ; OS/A+ equates.
00340 CPBUFP .EQ $A next char.
00350 CPCMDB .EQ $3F command buff.
00360 ;
00370 .OR $4000
00380 ;
00390 ; Test for XL series computer
00400 START LDA $FCD8
00410 CMP #$A2
00420 BEQ DOS
00430 ; Save run vector
00440 LDA DOSVEC
00450 STA VECTMP
00460 LDA DOSVEC+1
00470 STA VECTMP+1
00480 ; Save init vector.
00490 LDA DOSINI
00500 STA INITMP
00510 LDA DOSINI+1
00520 STA INITMP+1
00530 ; Check the command input
00540 ; buffer for an 'I or 'O.
00550 LDX #1 assume OUT
00560 LDY #CPBUFP
00570 LDA (DOSVEC),Y
00580 CLC
00590 ADC #CPCMDB+1
00600 TAY
00610 LDA (DOSVEC),Y
00620 CMP #'O out?
00630 BEQ SET.IT
00640 DEX
00650 CMP #'I in?
00660 BEQ SET.IT
00670 ; Not 'I or 'O, exit to CP/A.
00680 RTS
00690 ; Set BASIC in/out.
00700 SET.IT STX BASICF
00710 LDA #$32 clear cmnd
00720 STA (DOSVEC),Y
00730 ; Set init/run vector to
00740 ; continuation code.
00750 LDA #CONT
00760 STA DOSVEC
00770 STA DOSINI
00780 LDA /CONT
00790 STA DOSVEC+1
00800 STA DOSINI+1
00810 ; Set BOOT to succesfull disk
00820 ; boot so SynAssembler will not
00830 ; attempt to run.
00840 LDA #01
00850 STA BOOT
00860 ; Let the OS switch BASIC,
00870 ; reset the memory size, and
00880 ; open E: at the new RAMTOP.
00890 JMP $E474 Warmstart
00900 ;
00910 ; Restore init/run vectors.
00920 CONT LDA VECTMP
00930 STA DOSVEC
00940 LDA VECTMP+1
00950 STA DOSVEC+1
00960 LDA INITMP
00970 STA DOSINI
00980 LDA INITMP+1
00990 STA DOSINI+1
01000 ; Init DOS ($7E0 for FMS.)
01010 ; If you are running OS/A+ v.4
01020 ; add DOSINIT JMP (DOSINI)
01030 ; after the label DOS, and
01040 ; delete the DOSINIT equate
01050 ; above.
01060 JSR DOSINIT
01070 ; If BASIC IN, then set BASIC
01080 ; 'load in progress' flag, so
01090 ; all BASIC work areas will be
01100 ; cleared. (force a NEW)
01110 LDA BASICF
01120 BNE DOS
01130 LDA #$FF
01140 STA LOADFLG
01150 ; Return to DOS.
01160 DOS JMP (DOSVEC)
01170 ;
01180 ;
01190 END .LI ON